package com.zillion.common.utils.file;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Base64;

public class Base64Utils {

    private static final Logger log = LoggerFactory.getLogger(Base64Utils.class);

    /**
     * 图片转换成 Base64
     *
     * @param imagePath 图片路径
     * @return base64
     */
    public static String convertImageToBase64(String imagePath) {
        File file = new File(imagePath);
        try (FileInputStream imageInFile = new FileInputStream(file)) {
            // 读取文件的字节数据
            byte[] imageData = new byte[(int) file.length()];
            imageInFile.read(imageData);
            // 使用 Base64 编码转换
            return Base64.getEncoder().encodeToString(imageData);
        } catch (IOException e) {
            log.error("图片转换异常:", e);
            return null;
        }
    }


    /**
     * 将 Base64 字符串转换为图片并保存到指定路径
     *
     * @param base64String Base64 编码的图片数据（不包含前缀如 data:image/png;base64,）
     * @param outputPath   图片输出的完整路径，例如 "D:/images/output.png"
     */
    public static void saveBase64AsImage(String base64String, String outputPath) {
        try {
            // 去除可能存在的 Base64 前缀（例如：data:image/png;base64,）
            if (base64String.contains(",")) {
                base64String = base64String.split(",")[1];
            }

            // 解码 Base64 数据为字节数组
            byte[] imageBytes = Base64.getDecoder().decode(base64String);

            // 写入文件输出流
            try (FileOutputStream fos = new FileOutputStream(outputPath)) {
                fos.write(imageBytes);
            }

            log.info("图片已成功保存至：{}", outputPath);
        } catch (IOException e) {
            log.error("图片保存失败：{}", e.getMessage());
            e.printStackTrace();
        }
    }
}
